package preguntas;



import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collections;
import java.util.ArrayList;
import java.util.Properties;
import java.util.Random;

import utilidades.FileUtilities;
import utilidades.PropertiesFile;


public class SeleccionDirecta {
	private static ArrayList<Integer>selDir, selDir2, original, arrayObjetivo;
	private static int step=0, pasoAbuscar;
	
	public static void main(String args[]) throws FileNotFoundException, IOException {
		Random rnd = new Random();		
		Properties properties = new PropertiesFile().getProperties();		
		int seed;
		int seedProperty;
		int sDSize;
		String property;
		String xmlFormat="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n ";
		String giftFormat="";
		String feedBack="";
		
		String filenameXml="Preguntas/SeleccionDirecta/PreguntaSeleccionDirectaXml.xml";
		String filenameGift="Preguntas/SeleccionDirecta/PreguntaSeleccionDirectaGift.txt";
		
		
		File fileXml=FileUtilities.createFile(filenameXml);
		File fileGift=FileUtilities.createFile(filenameGift);
		
		xmlFormat=xmlFormat+"<quiz>\r\n\t <question type=\"category\">\r\n\t <category>\r\n\t <text>Estructura de datos</text>\r\n </category>\r\n </question>";
		
		property=properties.getProperty("SDSize");	
		sDSize=Integer.parseInt(property);	
		
		property=properties.getProperty("seedSD");			
		seedProperty=Integer.parseInt(property);
		
		if(seedProperty==-1)
			seed= (int) java.lang.Math.round(Math.random()*999999999+0);
		else
			seed=seedProperty;
		
		
		rnd.setSeed(seed);
		 xmlFormat=xmlFormat+" <question type=\"cloze\"> \r\n\t <name> \r\n\t <text>pregunta de Seleccion Directa  con seed="+seed +"</text>\r\n</name> \r\n<questiontext format=\"html\">\r\n\t <text>\r\n\t ";
		 giftFormat=giftFormat+"::Pregunta Seleccion Directa seed="+seed +"::\r\n";
		/////////////////////////////////////////////////////////////////////////
		
		 // Genera array de 100 valores y los mete en aux
		 ArrayList<Integer>aux= new ArrayList<Integer>();
		 for(int i=0;i<99;i++)
			 aux.add(i);		 	
		 Collections.shuffle(aux, rnd);				
		 
		 selDir= new ArrayList<Integer>();
		 selDir2= new ArrayList<Integer>();
		 original= new ArrayList<Integer>();
		 
		 for(int i=0;i<sDSize;i++){
			 selDir.add(i, aux.get(i));
			 selDir2.add(i, aux.get(i)); 
			 original.add(i, aux.get(i));
		 }	 

		
		 
		 
		 System.out.println("Original ");
		 System.out.println(original.toString());
		
		 seleccionDirecta();
		 
		 
		
		 selDir=selDir2;
		 
		 seleccionDirecta();
		 pasoAbuscar= 3+(new Random()).nextInt(step-2);
		 
		 xmlFormat=xmlFormat+" <![CDATA[<p>Ordene e Introduzca mediante Seleccion Directa la siguiente secuencia  ";
		 giftFormat=giftFormat+"Ordene e Introduzca mediante Seleccion Directa la siguiente secuencia  ";
		 for(int i=0;i<sDSize;i++)
		 {
			 xmlFormat=xmlFormat+ original.get(i)+" ";
		 	giftFormat=giftFormat+ original.get(i)+" ";
		 }
		 xmlFormat=xmlFormat+"en el paso numero "+ pasoAbuscar;
		 giftFormat=giftFormat+"en el paso numero "+ pasoAbuscar;
		 
		 giftFormat=giftFormat+"{\r\n ";
		 xmlFormat=xmlFormat+" </p> ";

		 System.out.println();
		 System.out.println("Dados los siguientes datos "+ original.toString()+" , ordene mediante selecci�n directa e introduzca " +
		 		"la secuencia correspondiente al paso " + pasoAbuscar);
		 System.out.println("Soluci�n: " + arrayObjetivo.toString());
		 
		 
		 xmlFormat=xmlFormat+"<p> ";
		 giftFormat=giftFormat+"=%100%";
		 
		 for (int i=0;i<sDSize;i++)
		 {
			 xmlFormat=xmlFormat+"{1:MULTICHOICE:";
			 giftFormat=giftFormat+arrayObjetivo.get(i)+" ";
			 feedBack="El resultado correcto es la letra "+arrayObjetivo.get(i);
			 for(int j=0;j<original.size();j++)
			 {
				 if(j==0)
				 {
					 if(original.get(j)!=arrayObjetivo.get(i))
						 xmlFormat=xmlFormat+"~";
					 else
						 xmlFormat=xmlFormat+"=";
				 }
				 else
				 {
					 xmlFormat=xmlFormat+"~";
					 if(original.get(j)==arrayObjetivo.get(i))
						 xmlFormat=xmlFormat+"=";
				 }
				
				 xmlFormat=xmlFormat+original.get(j)+"#"+feedBack;
				 
			 }
			 xmlFormat=xmlFormat+"} ";
			 //System.out.println(enunciado.toString());
		 }
		 xmlFormat=xmlFormat+" </p> </p>]]>\r\n</text> \r\n </questiontext>\r\n <generalfeedback format=\"html\"> \r\n\t <text/> \r\n</generalfeedback>\r\n </question>\r\n	</quiz>\r\n";
		 giftFormat=giftFormat+"\r\n}";
		 FileUtilities.writeFile(fileXml, xmlFormat); 
			FileUtilities.writeFile(fileGift, giftFormat);
	}
	

	
	public static void seleccionDirecta(){
		int cambios=0,cambiosAnt=0;
		step=0;
		
		int minimo, aux, posMin;
		for(int i=0; i< selDir.size()-1; i++){			
			minimo=selDir.get(i);
			posMin=i;
			for(int j=i; j<selDir.size(); j++){
				if(minimo>selDir.get(j)){
					minimo=selDir.get(j);
					posMin=j;
					cambios++;
				}

			}			
			aux=selDir.get(i);
			selDir.set(i, selDir.get(posMin)); 
			selDir.set(posMin, aux);
			
			if(cambios!=cambiosAnt){
				step++;
				cambiosAnt=cambios;
			}			
			System.out.print(selDir.toString());
			System.out.println("--" +" paso "+ step + "--");
			if(step==pasoAbuscar){
				arrayObjetivo= new ArrayList<Integer>();
				for(int x=0; x<selDir.size(); x++)
					arrayObjetivo.add(x, selDir.get(x));				
			}
		}		
	}	
}
